package com.example.redisdemo.protocol;

import java.io.IOException;
import java.io.OutputStream;

// 7、创建协议层，组装数据
public class Proctool {
    public static final String X="*";
    public static final String Y="$";
    // redis协议中固定的结束符表示
    public static final String Z="\r\n";
    // 数据转化方法：组装发送过去的信息
    // 参数说明：协议---Proctool.Command，写入数据---OutputStream，数据---byte数组
    public static void sendCommand(Proctool.Command command,OutputStream outputStream,byte[] ...b){
        StringBuffer stringBuffer = new StringBuffer();
        // 数组长度 *3
        stringBuffer.append(X).append(b.length+1).append(Z);
        // 命令长度 $3
        stringBuffer.append(Y).append(command.name().length()).append(Z);
        // 命令 SET
        stringBuffer.append(command).append(Z);
        // 命令 get
        for (byte[] bytes:b){
            stringBuffer.append(Y).append(bytes.length).append(Z);
            stringBuffer.append(new String(bytes)).append(Z);
        }
        try {
            System.out.println(stringBuffer.toString());
            outputStream.write(stringBuffer.toString().getBytes());
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    // 协议中指令
    public static enum Command{
        SET,GET
    }
}
